/**
 * 
 */
package com.dycn.posdashboard.dao;

import java.util.Date;
import java.util.List;

import com.dycn.posdashboard.data.PosTransactionData;
import com.dycn.posdashboard.data.PosTransactionDataStats;
import com.dycn.posdashboard.data.StatsData001;
import com.dycn.posdashboard.data.StatsData002;
import com.dycn.posdashboard.data.StatsData003;
import com.dycn.posdashboard.data.StatsTimeUnit;

/**
 * @author gongqiyi
 *
 */
public interface PosTransactionDataDao extends IBaseDao {

 
	
	/**
	 * 获取指定cardNo 在 特定MerchantNo商户NO的交易记录信息
	 * dbSource  merchantNo  cardNo 同时为空 查询所有记录
	 * @param dbSource
	 * @param dbSource 分公司 如果为null,为特定商户交易信息  A
	 * @param merchantNo 商户NO 如果为null,为所有商户下的指定卡的交易信息
	 * @param cardNo 卡号                  如果为null,为所有商户下的交易信息，不限定卡，不能同时为null
	 * @param startTime 查询范围 开始时间
	 * @param endTime	查询范围 结束时间
	 * @param startIndex 记录开始index
	 * @param endIndex	记录结束index
	 * @return
	 */
	public List<PosTransactionData> getPosTransactionDataListBy(String dbSource,
			String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime,
			int startIndex,int endIndex);

	public int getTotalRecordsOfPosTransactionDataListBy(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime,
			int startIndex,int endIndex);
	
	
	public int getTotalRecordsOfPosTransactionDataStatsByyBranch(String dbSource,
			String branchNo, Date startTime,
			Date endTime);
	
	//获取统计信息
	/**
	 * 获取指定范围的消费统计信息
	 * @param dbSource
	 * @param branchNo
	 * @param merchantNo
	 * @param cardNo
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<PosTransactionDataStats> getPosTransactionDataStatsBy(String dbSource,
			String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime,int startIndex,int endIndex,StatsTimeUnit statsTimeUnit);
	
	
	public List<PosTransactionDataStats> getPosTransactionDataStatsByBranch(String dbSource,
			String branchNo,Date startTime,Date endTime,int startIndex,int endIndex);
	
	public List<PosTransactionDataStats> getMerchantPosTransactionDataStatsByBranch(String dbSource,
			String branchNo,Date startTime,Date endTime,int startIndex,int endIndex);
	

	public int getTotalRecordsOfMerchantPosTransactionDataStatsByyBranch(String dbSource,
			String branchNo, Date startTime,
			Date endTime);
	
	
	public int getTotalRecordsOfPosTransactionDataStatsByy(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime,StatsTimeUnit statsTimeUnit);
	
	/**
	 * insert new trade data
	 * @param dbSource
	 * @param posTransactionDataStats
	 */
	public PosTransactionData insertPosTransactionData(String dbSource,
			PosTransactionData posTransactionData);
	
	/**
	 * insert new trade data
	 * @param dbSource
	 * @param posTransactionDataStats
	 */
	public List<PosTransactionData> batchInsertPosTransactionData(String dbSource,
			List<PosTransactionData> posTransactionDataList);
	
	public List<PosTransactionData> batchUpdatePosTransactionData(String dbSource,
			List<PosTransactionData> posTransactionDataList);
	
	/**
	 * 
	 * @param dbSource
	 * @param branchNo
	 * @param merchantNo
	 * @param cardNo
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<StatsData001> getStatsData001(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime);
	
	public List<StatsData001> getStatsData001Month(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime);
	
	public List<StatsData001> getStatsData001Year(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime);
	
	
	/**
	 * 
	 * @param dbSource
	 * @param branchNo
	 * @param merchantNo
	 * @param cardNo
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public List<StatsData002> getStatsData002(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime);
	
	public List<StatsData003> getStatsData003(String dbSource,String branchNo,String merchantNo,String cardNo,Date startTime,Date endTime);
}
